/**
 * @file MessageChannel 通信类型定义
 * @description 定义 MessageChannel 通信中所有可能的 topic 和对应的 data 类型组合
 * @author AI Assistant
 * @version 1.0.0
 * @since 2025-08-31
 */

// topic前缀
export const topicPrefix = 'browser:'

/**
 * 定义所有可能的 topic 和对应的 data 类型组合,用于主进程
 * */
export interface ToBrowserMainMap {
  /**
   * 添加标签页
   * @param tab 要添加的标签页
   * @param type 标签页类型
   * */
  addTab: [tab?: F2.tab.CreateInput, type?: F2.tab.ControllerType]
  // 批量关闭标签页
  closeTabs: [tabIds: number[]]
  hideTab: [tabId: number]
  setActiveTab: [tabId?: number]
  setLayer: [isOnTop: boolean]
  // 窗口控制
  minimizeWindow: []
  maximizeWindow: []
  unmaximizeWindow: []
  closeWindow: []
  createGroup: [urls: string[]]
}

export interface GetBrowserTabsParam {
  getBrowserTopTabs: { params: []; result: F2.tab.Entity[] }
  getBrowserLeftTabs: { params: []; result: F2.tab.Entity[] }
  getBrowserRightTabs: { params: []; result: F2.tab.Entity[] }
  getActiveTabId: { params: []; result: number }
  isMainWindow: { params: []; result: boolean }
  getSeparateOpenIds: { params: []; result: number[] }
  isWindowMaximized: { params: []; result: boolean }
}

export interface ToLayoutRendererMap {
  // 独立弹窗更新 数据
  'separate:update': [tab: F2.tab.Patch]
  'open-separate-windows:change': [tabs: number[]]
  // 标签页创建
  'top:created': [tab: F2.tab.Entity[]]
  'left:created': [tab: F2.tab.Entity[]]
  'right:created': [tab: F2.tab.Entity[]]

  // 标签页更新
  'top:update': [tab: F2.tab.Patch]
  'left:update': [tab: F2.tab.Patch]
  'right:update': [tab: F2.tab.Patch]

  // 标签页初始化完成
  'top:inited': [tabId: number]
  'left:inited': [tabId: number]
  'right:inited': [tabId: number]

  // 标签页关闭
  'top:close': [tabIds: number[]]
  'left:close': [tabIds: number[]]
  'right:close': [tabIds: number[]]
  // top:switch和left:switch合并为 switch
  switch: [tabId: number]
  'right:switch': [tabId: number[]]
  // 窗口状态变化
  'window:maximize-state': [isMaximized: boolean]
  // 创建分组
  'group:create': [urls: string[]]
}
